TEXT_HANDLE_N_HANDLES
};
-struct _GtkTextViewPrivate
+struct _GtkTextViewPrivate
{
GtkTextLayout *layout;
GtkTextBuffer *buffer;
static void gtk_text_view_update_im_spot_location (GtkTextView *text_view);
static void gtk_text_view_insert_emoji (GtkTextView *text_view);
-/* Container methods */
-static void gtk_text_view_add (GtkContainer *container,
- GtkWidget *child);
-static void gtk_text_view_remove (GtkContainer *container,
- GtkWidget *child);
-static void gtk_text_view_forall (GtkContainer *container,
- GtkCallback callback,
- gpointer callback_data);
static void update_node_ordering (GtkWidget *widget);
/* GtkTextHandle handlers */
static guint signals[LAST_SIGNAL] = { 0 };
-G_DEFINE_TYPE_WITH_CODE (GtkTextView, gtk_text_view, GTK_TYPE_CONTAINER,
+G_DEFINE_TYPE_WITH_CODE (GtkTextView, gtk_text_view, GTK_TYPE_WIDGET,
G_ADD_PRIVATE (GtkTextView)
G_IMPLEMENT_INTERFACE (GTK_TYPE_SCROLLABLE, NULL))
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
- GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
/* Default handlers and virtual methods
*/
widget_class->size_allocate = gtk_text_view_size_allocate;
widget_class->snapshot = gtk_text_view_snapshot;
- container_class->add = gtk_text_view_add;
- container_class->remove = gtk_text_view_remove;
- container_class->forall = gtk_text_view_forall;
-
klass->move_cursor = gtk_text_view_move_cursor;
klass->set_anchor = gtk_text_view_set_anchor;
klass->insert_at_cursor = gtk_text_view_insert_at_cursor;
static void
gtk_text_view_dispose (GObject *object)
{
- GtkTextView *text_view;
- GtkTextViewPrivate *priv;
+ GtkTextView *text_view = GTK_TEXT_VIEW (object);
+ GtkTextViewPrivate *priv = text_view->priv;
+ GtkWidget *child;
- text_view = GTK_TEXT_VIEW (object);
- priv = text_view->priv;
+ while ((child = gtk_widget_get_first_child (GTK_WIDGET (text_view))))
+ gtk_text_view_remove (text_view, child);
gtk_text_view_remove_validate_idles (text_view);
gtk_text_view_set_buffer (text_view, NULL);
}
}
-/*
- * Container
- */
-
-static void
-gtk_text_view_add (GtkContainer *container,
- GtkWidget *child)
-{
- /* There isn't really a good default for what to do when
- * using gtk_container_add() for @child. So we default to
- * placing it at 0,0 in the text window.
- */
- gtk_text_view_add_overlay (GTK_TEXT_VIEW (container), child, 0, 0);
-}
-
-static void
-gtk_text_view_remove (GtkContainer *container,
- GtkWidget *child)
+void
+gtk_text_view_remove (GtkTextView *text_view,
+ GtkWidget *child)
{
- GtkTextView *text_view = GTK_TEXT_VIEW (container);
GtkTextViewPrivate *priv = text_view->priv;
AnchoredChild *ac;
anchored_child_free (ac);
}
-static void
-gtk_text_view_forall (GtkContainer *container,
- GtkCallback callback,
- gpointer callback_data)
-{
- const GList *iter;
- GtkTextView *text_view;
- GtkTextViewPrivate *priv;
-
- g_return_if_fail (GTK_IS_TEXT_VIEW (container));
- g_return_if_fail (callback != NULL);
-
- text_view = GTK_TEXT_VIEW (container);
- priv = text_view->priv;
-
- if (priv->left_child)
- callback (GTK_WIDGET (priv->left_child), callback_data);
- if (priv->right_child)
- callback (GTK_WIDGET (priv->right_child), callback_data);
- if (priv->top_child)
- callback (GTK_WIDGET (priv->top_child), callback_data);
- if (priv->bottom_child)
- callback (GTK_WIDGET (priv->bottom_child), callback_data);
- if (priv->center_child)
- callback (GTK_WIDGET (priv->center_child), callback_data);
-
- iter = priv->anchored_children.head;
- while (iter != NULL)
- {
- const AnchoredChild *ac = iter->data;
- iter = iter->next;
- callback (ac->widget, callback_data);
- }
-}
-
#define CURSOR_ON_MULTIPLIER 2
#define CURSOR_OFF_MULTIPLIER 1
#define CURSOR_PEND_MULTIPLIER 3